package com.zhou.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Date;
import java.util.Map;

public class JWTUtils {

    // 设置密钥内容
    private  static final String SING ="#zhouguiyou";
    // 设置超时时间，单位为天
    private static long day =3;


    /**
     * 设置前端需要的token失效时间戳
     */
    public static Long getFailure_time(){
        Long startTs = System.currentTimeMillis()/ 1000 + day*24 * 60 * 60;
        return startTs;
    }

    /**
     * 生成token header.payload.sing
     */
    public static String getToken(Map<String,String> map){

        //生成的过期时间点
        Calendar instance = Calendar.getInstance();
        // 添加时间可以算出时间点，单位DATE代表天，第二个参数代表几天
        instance.add(Calendar.DATE, (int) day);

        // 创建JWT builder对象
        JWTCreator.Builder builder = JWT.create();
        // 通过map类型数据添加payload信息（如账户名、用户名字等这些非敏感信息）
        map.forEach((k,v)->{
            builder.withClaim(k,v);
        });

        // 生成token的算法
        String token = builder
                // 指定令牌过期时间点
                .withExpiresAt(instance.getTime())
                .sign(Algorithm.HMAC256(SING));

        return token;
    }

    /**
     * 验证token的合法性
     */
    public static DecodedJWT verify(String token){
       return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
    }

//    /**
//     * 获取token信息方法
//     */
//    public static DecodedJWT getTokenInfo(String token){
//        DecodedJWT verify = JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
//        return verify;
//    }
}
